﻿using System;

using EFB.Lib.Entity;
using EFB.Lib.Repository;

namespace EFB.Lib.Process {

    public class UsuarioProcess {

        public void Incluir(UsuarioEntity Usuario) {
            UsuarioRepository Repository = null;
            try {

                Repository.BeginTransaction();

                // validações de regras aqui, usando "Repository" ou inclusive "Process" de outras "Entities"

                Repository.CommitTransaction();

            } catch {
                Repository.RollbackTransaction();
                throw;
            } 
        }

        public void Acessar(ref UsuarioEntity Usuario) {                        
            try {

                UsuarioRepository Repository = new UsuarioRepository();
                Repository.Acessar(ref Usuario);

                if (Usuario.Id.Equals(0)) {
                    throw new Exception("Acesso negado (o login ou a senha não conferem).");
                }

                if (Usuario.Status == UsuarioStatus.BLOQUEADO) {
                    throw new Exception("Acesso negado (a conta do usuário está bloqueada).");
                }

                if (Usuario.Status == UsuarioStatus.CANCELADO) {
                    throw new Exception("Acesso negado (a conta do usuário está cancelada).");
                }

                AssinanteEntity Assinante = Usuario.Assinante;
                AssinanteProcess AssinanteProc = new AssinanteProcess();
                AssinanteProc.Acessar(ref Assinante);

            } catch {
                throw;
            }
        }

    }

}
